﻿//============================================================================================
/*
 * @brief 配置信息。
 * 
 *********************************************************************************************/

namespace ProjectTemplate.API.Models;

/// <summary>
/// 配置数据。
/// </summary>
public class SettingData
{
    /// <summary>
    /// 配置实例。
    /// </summary>
    public static SettingData Instance { get; private set; } = new SettingData();

    /// <summary>
    /// 是否调试。
    /// </summary>
    public bool IsDebug { get; set; }

    /// <summary>
    /// 此 API 项目配置。
    /// </summary>
    public ProjectConfig Project { get; set; } = new ProjectConfig();

    /// <summary>
    /// 数据库连接配置。
    /// </summary>
    public DatabaseConfig Database { get; set; } = new DatabaseConfig();

    /// <summary>
    /// 设置配置信息。
    /// </summary>
    /// <param name="settings">配置信息。</param>
    public static void Initialize(SettingData settings)
    {
        Instance = settings ?? throw new ArgumentNullException(nameof(settings));
    }

    /// <summary>
    /// 项目配置。
    /// </summary>
    public class ProjectConfig
    {
        /// <summary>
        /// 名称。
        /// </summary>
        public string Name { get; set; } = string.Empty;

        /// <summary>
        /// 网址。
        /// </summary>
        public string Url { get; set; } = string.Empty;

        /// <summary>
        /// 绑定域名规则。
        /// </summary>
        /// <remarks>
        /// 示例：
        /// http://*:10005
        /// </remarks>
        public string Rule { get; set; } = string.Empty;
    }

    /// <summary>
    /// 数据库连接配置。
    /// </summary>
    public class DatabaseConfig
    {
        /// <summary>
        /// 数据库连接。
        /// </summary>
        public string DbConnection { get; set; } = string.Empty;

        /// <summary>
        /// 数据库连接加密 KEY。
        /// </summary>
        public string DbKey { get; set; } = string.Empty;
    }
}